<?php
/**
 * 系统接口
 *
 * @author Mo yi <root@imoi.cn>
 * @link   http://www.imoi.cn
 * @copyright Copyright &copy; 2010-2012 DuoLam Software LLC
 * @license http://www.imoi.cn/license/
 * @version $Id: interface.php 2799 2012-03-30 09:31:13Z Mo.yi $
 * @package base
 * @since 1.0
 */

/**
 * 缓存接口
 */
interface ICache
{
	/**
	 * 缓存初始方法
	 */
	function init();

	/**
	 * 设置一个缓存
	 * @param string $id     缓存ID
	 * @param string $value  缓存值
	 * @param int    $expire 有效时间
	 * @return boolean
	 */
	function set($id,$value,$expire=0);

	/**
	 * 获取某个缓存
	 * @param string $id 缓存名
	 * @return mixed
	 */
	function get($id);

	/** 
	 * 删除某个缓存
	 * @param string $id 缓存名
	 * @return boolean
	 */
	function delete($id);

	/**
	 * 清空所有缓存
	 */
	function flush();

	/**
	 * 检测某个缓存是否存在
	 * @param string $id  缓存ID
	 * @return boolean
	 */
	function is($id);
}


/**
 * 数据接口
 */
interface IModel
{
	/**
	 * 构造方法 初始化数据库连接
	 * @param string $name   记录主从库的名称
	 * @param array  $config 包含配置数据库信息
	 */
	function __construct($name,$config);
	
	/**
	 * 执行SQL命令方法
	 * @param string $sql SQL语句
	 * @return mixed 返回一个资源句柄
	 */
	function query($sql);

	/**
	 * 执行非查询SQL命令方法，如：INSERT,UPDATE
	 * @param string $sqk SQL语句
	 */
	function execute($sql);

	/**
	 * 返回数据库一行数据，包含对查询数据进行缓存
	 * @param string $sql    SQL语句
	 * @param int 	 $expire 缓存过期时间
	 * @param mixed  $mode   返回格式，ASSOC or NUM...
	 */
	function find($sql,$expire=-1,$mode=null);

	/**
	 * 返回数据库多行数据，包含对查询数据进行缓存
	 * @param string $sql    SQL语句
	 * @param int 	 $expire 缓存过期时间
	 * @param mixed  $mode   返回格式，ASSOC or NUM...
	 */
	function finds($sql,$expire=-1,$mode=null);

	/**
	 * 开启预处理
	 * @param string $sql;
	 * @param object 类本身，用于链式操作
	 */
	function prepare($sql);

	/**
	 * 绑定参数，参数列表
	 * @param array $array
	 * 例子：array(':id'=>5,':name'=>'张三');
	 * @return object 类本身
	 */
	function bindParam($array);

	/**
	 * 执行预处理SQL语句，返回非查询的结果
	 * 影响行数或者获取上一次INSERT的ID
	 * @return int
	 */
	function stmtQuery();

	/**
	 * 获取预处理查询到的一行数据
	 * @param int    缓存过期时间
	 * @return array 数据结果集
	 */
	function stmtFind($expire = -1);

	/**
	 * 获取预处理查询到的多行数据
	 * @param int    缓存过期时间
	 * @return array 数据结果集
	 */
	function stmtFinds($expire = -1);

	/**
	 * 开启事务
	 */
	function startAffairs();

	/**
	 * 提交事务
	 */
	function submitAffairs();

	/**
	 * 回滚事务
	 */
	function rollbackAffairs();

	/**
	 * 获取处理过后的表前缀
	 * @param string $sql  要处理的SQL语句
	 * @return string      处理后的SQL语句
	 */
	function getDealTablePrefix($sql);

	/**
	 * 返回缓存句柄
	 */
	function getCache();

	/**
	 * 对特殊字符进行转义处理
	 * @param string $value   需要转义的内容
	 * @return string         返回转义后的内容
	 */
	function escape($value);

	/**
	 * 对转义过的内容进行还原
	 * @param string $value   转义过的内容
	 * @return string         返回原始内容
	 */
	function unescape($value);

	/**
	 * 错误
	 * @param string $msg 错误信息
	 * @param string $sql SQL语句
	 */
	function halt($msg,$sql=null);

	/**
	 * 关闭数据库
	 */
	function close();
}

/**
 * SQL语句处理类
 */
interface ISchema
{
	/**
	 * 获取数据表列的信息
	 * @param string $table 数据表名
	 */
	public function getColumn($table);

	/**
	 * 获取主键名
	 */
	public function getPk();
}

/**
 * 视图接口
 */
interface IView
{
	/**
	 * 渲染视图
	 * @param string  $viewFile 视图文件名
	 * @param array   $var      注入模板的变量
	 * @param boolean $return   是否返回模板内容
	 */
	public function render($viewFile = '', $var = array(), $return = false);
}
?>